package com.biz.primus.ms.oms.service.collection;

import com.biz.primus.model.oms.vo.OmsOrderReturnVo;
import com.biz.primus.model.oms.vo.OmsOrderVo;
import com.biz.primus.model.oms.vo.returns.RefundRequestVo;

/**
 *
 * 收单服务,收集外部订单/退单,将其存储到OMS数据库,并触发分单
 * @author yanweijin
 * @date 2017/10/18
 */
public interface OmsCollectionService {


	/**
	 * 新收订单,订单通过各种方式(mns,mq,http)汇总后交由这个方法存储到oms系统
	 *
	 * 新订单到来之后有三种可能状态:
	 *  orderBegin: 线上订单一定是begin(新订单待分单)状态
	 *  orderOutbound: 线下订单需要配送或自提时会推送已出库状态
	 *  orderFinished: 线下现款现货的订单,推到oms直接是已完成的状态
	 *  不支持其他状态的推送
	 *
	 * 处理流程:
	 *  1. 记录日志
	 *  2. 验证(订单编号)
	 *  3. 记录
	 *  4. 根据订单状态触发下一步:
	 *      orderBegin -> 分单操作
	 *      orderOutbound -> 如需配送,要推送配送APP
	 *      orderFinished -> 订单同步给前端订单系统
	 *
	 *
	 * @param order
	 */
	void collectionOrder(OmsOrderVo order);


	/**
	 * 退货单收单
	 * @param vo
	 */
	void collectionReturn(OmsOrderReturnVo vo);

	/**
	 * 生产退款单: 一个退货单只能对应一个退款单
	 * @param vo
	 */
	void collectionRefund(RefundRequestVo vo);
}
